<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>XML文档支持</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="SECT1">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="datatype-pseudo.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="datatype.html">快退</a></td><td width="60%" align="center" valign="bottom">章8. Data Types</td><td width="10%" align="right" valign="top"><a href="datatype.html">快进</a></td><td width="10%" align="right" valign="top"><a href="functions.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="SECT1"><h1 class="SECT1"><a name="DATATYPE-XML">8.14. XML文档支持</a></h1><a name="AEN6241"></a>
<p>XML(可扩展标记语言)支持不是一种单一的能力，而是需要数据库系统支持一系列的特性，包括存储、导入/导出、验证、索引、修改、搜索、转换、XML 到 SQL 映射，PostgreSQL 只支持其中的一部分，未来的版本将提供更多的 XML 支持。关于在数据库中使用 XML 的概览，请查看 <a href="http://www.rpbourret.com/xml/XMLAndDatabases.htm" target="_top">http://www.rpbourret.com/xml/XMLAndDatabases.htm</a> 。</p>
<div class="VARIABLELIST">
<dl>
<dt>存储</dt>
<dd><p>PostgreSQL 没有专门的 XML 数据类型。用户应当将 XML 文档存储在普通的 <tt class="TYPE">TEXT</tt> 字段中。如果需要将文档分割成各个组成部分以便于将每个元素分别存储，必须使用中间层解决方案。但是一旦完成，数据将变成关系并且必须这样处理。</p></dd>
<dt>导入/导出</dt>
<dd><p>必须使用外部工具才能将 XML 映射为关系表。一个导出 XML 的简单途径是以 HTML 模式使用 <span class="APPLICATION">psql</span>(<tt class="LITERAL">\pset format html</tt>)，然后使用外部工具将 XHTML 输出转换为 XML 。</p></dd>
<dt>验证</dt>
<dd><p><tt class="FILENAME">/contrib/xml2</tt> 中有一个 <code class="FUNCTION">xml_is_well_formed()</code> 函数可以在 <tt class="LITERAL">CHECK</tt> 约束中使用以确保字段中保存的内容是格式良好的 XML ，但是它不支持根据特定的 XML 模式进行校验。可以使用具有 XML 功能的服务端语言根据特定的 XML 模式进行校验。</p></dd>
<dt>索引</dt>
<dd><p><tt class="FILENAME">/contrib/xml2</tt> 中的函数可以用于表示特定 XML 字段的索引。要对 XML 文档全文进行索引，可以使用全文索引工具 <tt class="FILENAME">/contrib/tsearch2</tt> 。由于 Tsearch2 索引对 XML 一无所知，所以必须在查询中添加额外的 <tt class="FILENAME">/contrib/xml2</tt> 检查。</p></dd>
<dt>修改</dt>
<dd><p>如果 <tt class="COMMAND">UPDATE</tt> 没有修改 XML 字段，那么 XML 数据在新旧行之间是共享的。但是，如果 <tt class="COMMAND">UPDATE</tt> 修改了 XML 字段，那么必须在内部创建一个完整的已修改的该 XML 字段副本。</p></dd>
<dt>搜索</dt>
<dd><p>可以使用 <tt class="FILENAME">/contrib/xml2</tt> 实现 XPath 搜索。它用于处理 XML 文本文档并根据被请求的查询返回结果。</p></dd>
<dt>转换</dt>
<dd><p><tt class="FILENAME">/contrib/xml2</tt> 支持 XSLT (Extensible Stylesheet Language Transformation)。</p></dd>
<dt>XML 到 SQL 映射</dt>
<dd><p>在 XML 数据和关系结构之间相互转换。PostgreSQL 没有这种映射功能的内部支持，必须依靠外部工具。</p></dd>
<dt>不支持的特性</dt>
<dd><p>不支持的特性包括：XQuery 、SQL/XML 语法(ISO/IEC 9075-14)、专用于 XML 存储的 XML 数据类型。</p></dd>
</dl>
</div>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="datatype-pseudo.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="functions.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">伪类型</td><td width="34%" align="center" valign="top"><a href="datatype.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">函数和操作符</td></tr>
</table>
</div>
</body></html>